using AiQiuQuan.Sport.Model.Enums;
using System.ComponentModel.DataAnnotations;

namespace AiQiuQuan.Sport.Model.Models
{
    /// <summary>
    /// 新增场馆会员卡套dto
    /// </summary>
    public class VenueMemberCardAddDto : IValidatableObject
    {
        /// <summary>
        /// 卡套名称
        /// </summary>
        [Required(AllowEmptyStrings = false, ErrorMessage = "卡套名称必填")]
        public string Name { get; set; }

        /// <summary>
        /// 会员卡类型：1储值卡、2次卡、3打折卡
        /// </summary>
        [Required(ErrorMessage = "会员卡类型：1储值卡、2次卡、3打折卡必填")]
        [EnumDataType(typeof(MemberCardTypeEnum), ErrorMessage = "1储值卡、2次卡、3打折卡")]
        public MemberCardTypeEnum CardType { get; set; }

        /// <summary>
        /// 场馆id
        /// </summary>
        [Required(ErrorMessage = "场馆id必填")]
        public Guid VenueId { get; set; }

        /// <summary>
        /// 有效月份数，针对充值日期
        /// </summary>
        [Required(ErrorMessage = "有效月份数，针对充值日期必填")]
        [Range(0, int.MaxValue, ErrorMessage = "必须>=0")]
        public int ValidMonth { get; set; }

        /// <summary>
        /// 场地类型：1室内、2室外、3风雨
        /// </summary>
        [Required(ErrorMessage = "场地类型：1室内、2室外、3风雨必填")]
        [MinLength(1)]
        //[EnumDataType(typeof(SiteTypeEnum), ErrorMessage = "1室内、2室外、3风雨")]
        public List<int> SiteTypeList { get; set; }

        /// <summary>
        /// 可用日期：1工作日、2休息日
        /// </summary>
        [Required(ErrorMessage = "可用日期：1工作日、2休息日必填")]
        [MinLength(1)]
        //[EnumDataType(typeof(VenueDayEnum), ErrorMessage = "0全部、1工作日、2休息日")]
        public List<int> AvailableDateList { get; set; }

        /// <summary>
        /// 使用开始时间
        /// </summary>
        [Required(AllowEmptyStrings = false, ErrorMessage = "使用开始时间必填")]
        public string StartTime { get; set; }

        /// <summary>
        /// 使用结束时间
        /// </summary>
        [Required(AllowEmptyStrings = false, ErrorMessage = "使用结束时间必填")]
        public string EndTime { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; } = string.Empty;

        /// <summary>
        /// valid
        /// </summary>
        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (!TimeSpan.TryParse(StartTime, out var startTime))
            {
                yield return new ValidationResult("开始时间格式不正确");
                yield break;
            }

            if (!TimeSpan.TryParse(EndTime, out var endTime))
            {
                yield return new ValidationResult("结束时间格式不正确");
                yield break;
            }

            if (startTime > endTime)
            {
                yield return new ValidationResult("开始时间大于结束时间");
                yield break;
            }
        }
    }
}
